import time

from tqdm import tqdm

def SingleLoop():
    for i in tqdm(range(100)):
        # 假设我们正在进行一些耗时的操作，比如训练深度学习模型
        time.sleep(0.01)

def DownLoadBigFile():
    import requests
    # 5个G的文件
    url = "https://mqdb-release-1253802058.cos.ap-beijing.myqcloud.com/datasets/openai-50w-cosine.hdf5"
    # 185kb文件
    url = 'https://1.bp.blogspot.com/-1jq9R-na21U/Xwhip410sFI/AAAAAAAAAAY/fLO-FzWFlU8eKiCA5-IWAR22YoC1mM8-QCLcBGAsYHQ/s2048/real-ai.jpg'

    # 当你使用 stream=True 参数发送请求时，意味着你希望以流式方式获取响应内容，而不是一次性获取整个响应体。
    # 断点续传，使用图片来测试
    # headers = {'Range': 'bytes=0-%d'%(100*1024)} # 第一次，文件写模式：wb
    headers = {'Range': 'bytes=%d-'%(100*1024+1)} # 第二次，文件写模式：ab
    response = requests.get(url,stream=True,headers=headers)
    filesize = int(response.headers['Content-Length'])
    chunk = 1
    chunk_size = 1024
    num_bars = int(filesize / chunk_size)
    with open('test.tgz','ab') as fp:
        for chunk in tqdm(response.iter_content(chunk_size=chunk_size),total=num_bars,unit="KB",desc='test.tgz',leave=True):
            fp.write(chunk)

# def PreDealBigData():
#     import pandas as pd 
#     from tqdm import tqdm
#     tqdm.pandas()
#     # 假设我们有一个大的dataframe,我们需要对其‘text’列进行一些预处理
#     df['processed_text'] = df['text'].process_apply(lambda x: preprocess(x))

# def MachineLearn():
#     # 假设我们有一个训练数据集 train_dataloader 和一个模型model
#     for epoch in range(num_epochs):
#         epoch_iterator = = tqdm(train_dataloader, desc="Training (Epoch %d)"% epoch)
#         for step, batch in enumerate(epoch_iterator):
#             # 模型训练的代码
#             pass

def NestedLoop():
    for i in tqdm(range(100),desc="outer loop"):
        # leave=False 是表示：子循环不显示进度条，目的是保证页面的整洁，保证不会被内部进度条干扰
        for j in tqdm(range(10),desc="Inner Loop",leave=False):
            # 执行一些耗时的操作
            time.sleep(0.01)
            
def HandUpdateBar():
    with tqdm(total=100) as bar:
        for i in range(10):
            # 执行一些耗时的操作
            time.sleep(0.1)
            # 代表一次执行10个，进度条是10个的变化累加
            bar.update(10)
if __name__ == '__main__':
    DownLoadBigFile()